gtk_css_node_set_state (icon_info->css_node, state);
}
+static GtkCssNode *
+get_entry_node (GtkWidget *widget)
+{
+ if (GTK_IS_SPIN_BUTTON (widget))
+ {
+ const gchar *name;
+ GtkCssNode *node;
+
+ name = I_("entry");
+ node = gtk_css_node_get_first_child (gtk_widget_get_css_node (widget));
+ do {
+ if (gtk_css_node_get_name (node) == name)
+ return node;
+ } while ((node = gtk_css_node_get_next_sibling (node)) != NULL);
+ }
+
+ return gtk_widget_get_css_node (widget);
+}
+
static EntryIconInfo*
construct_icon_info (GtkWidget *widget,
GtkEntryIconPosition icon_pos)
icon_info->icon_helper = _gtk_icon_helper_new ();
_gtk_icon_helper_set_force_scale_pixbuf (icon_info->icon_helper, TRUE);
- widget_node = gtk_widget_get_css_node (widget);
+ widget_node = get_entry_node (widget);
icon_info->css_node = gtk_css_node_new ();
gtk_css_node_set_name (icon_info->css_node, I_("image"));
gtk_css_node_set_parent (icon_info->css_node, widget_node);
* width equals widget->window's width
* http://bugzilla.gnome.org/show_bug.cgi?id=466000
*/
- if (GTK_IS_SPIN_BUTTON (widget))
+ if (GTK_IS_SPIN_BUTTON (widget) &&
+ gtk_orientable_get_orientation (GTK_ORIENTABLE (widget)) == GTK_ORIENTATION_VERTICAL)
{
GtkBorder borders;
- gtk_entry_get_text_area_size (GTK_ENTRY (widget), &x, NULL, &width, NULL);
+ gtk_entry_get_text_area_size (GTK_ENTRY (widget), NULL, &y, NULL, &height);
_gtk_entry_get_borders (GTK_ENTRY (widget), &borders);
- x -= borders.left;
- width += borders.left + borders.right;
+ y -= borders.top;
+ height += borders.top + borders.bottom;
}
- gtk_render_background (context, cr,
- x, y, width, height);
- gtk_render_frame (context, cr,
- x, y, width, height);
+ gtk_render_background (context, cr, x, y, width, height);
+ gtk_render_frame (context, cr, x, y, width, height);
gtk_entry_draw_progress (widget, context, cr);
GtkEntryPrivate *priv = entry->priv;
int i;
- if (gtk_cairo_should_draw_window (cr,
- gtk_widget_get_window (widget)))
+ if (gtk_cairo_should_draw_window (cr, gtk_widget_get_window (widget)))
{
context = gtk_widget_get_style_context (widget);
if (priv->progress_node)
return;
- widget_node = gtk_widget_get_css_node (GTK_WIDGET (entry));
+ widget_node = get_entry_node (GTK_WIDGET (entry));
priv->progress_node = gtk_css_node_new ();
gtk_css_node_set_name (priv->progress_node, I_("progress"));
gtk_css_node_set_parent (priv->progress_node, widget_node);
#include "gtktypebuiltins.h"
#include "gtkwidgetpath.h"
#include "gtkwidgetprivate.h"
+#include "gtkstylecontextprivate.h"
+#include "gtkcssstylepropertyprivate.h"
#include "a11y/gtkspinbuttonaccessible.h"
GdkWindow *down_panel;
GdkWindow *up_panel;
- GtkStyleContext *down_panel_context;
- GtkStyleContext *up_panel_context;
+ GtkCssNode *entry_node;
+ GtkCssNode *down_node;
+ GtkCssNode *up_node;
GdkWindow *click_child;
GdkWindow *in_child;
gboolean was_grabbed);
static void gtk_spin_button_state_flags_changed (GtkWidget *widget,
GtkStateFlags previous_state);
-static void gtk_spin_button_style_updated (GtkWidget *widget);
static gboolean gtk_spin_button_timer (GtkSpinButton *spin_button);
static gboolean gtk_spin_button_stop_spinning (GtkSpinButton *spin);
static void gtk_spin_button_value_changed (GtkAdjustment *adjustment,
GdkEventKey *event);
static gint gtk_spin_button_scroll (GtkWidget *widget,
GdkEventScroll *event);
+static void gtk_spin_button_direction_changed (GtkWidget *widget,
+ GtkTextDirection previous_dir);
static void gtk_spin_button_activate (GtkEntry *entry);
static void gtk_spin_button_get_text_area_size (GtkEntry *entry,
gint *x,
widget_class->focus_out_event = gtk_spin_button_focus_out;
widget_class->grab_notify = gtk_spin_button_grab_notify;
widget_class->state_flags_changed = gtk_spin_button_state_flags_changed;
- widget_class->style_updated = gtk_spin_button_style_updated;
+ widget_class->direction_changed = gtk_spin_button_direction_changed;
entry_class->activate = gtk_spin_button_activate;
entry_class->get_text_area_size = gtk_spin_button_get_text_area_size;
add_spin_binding (binding_set, GDK_KEY_Page_Down, GDK_CONTROL_MASK, GTK_SCROLL_START);
gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SPIN_BUTTON_ACCESSIBLE);
+ gtk_widget_class_set_css_name (widget_class, "spinbutton");
}
static void
gtk_spin_button_real_spin (spin_button, -vel_y / 20);
}
+static void
+node_style_changed_cb (GtkCssNode *node,
+ GtkCssStyle *old_style,
+ GtkCssStyle *new_style,
+ GtkWidget *widget)
+{
+ GtkBitmask *changes;
+ static GtkBitmask *affects_size = NULL;
+
+ if (G_UNLIKELY (affects_size == NULL))
+ affects_size = _gtk_css_style_property_get_mask_affecting (GTK_CSS_AFFECTS_SIZE | GTK_CSS_AFFECTS_CLIP);
+
+ changes = _gtk_bitmask_new ();
+ changes = gtk_css_style_add_difference (changes, old_style, new_style);
+
+ if (_gtk_bitmask_intersects (changes, affects_size))
+ gtk_widget_queue_resize (widget);
+ else
+ gtk_widget_queue_draw (widget);
+
+ _gtk_bitmask_free (changes);
+}
+
+static void
+update_node_ordering (GtkSpinButton *spin_button)
+{
+ GtkSpinButtonPrivate *priv = spin_button->priv;
+ GtkCssNode *first, *middle, *last;
+ GtkCssNode *widget_node;
+
+ widget_node = gtk_widget_get_css_node (GTK_WIDGET (spin_button));
+
+ if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ if (gtk_widget_get_direction (GTK_WIDGET (spin_button)) == GTK_TEXT_DIR_LTR)
+ {
+ first = priv->entry_node;
+ middle = priv->down_node;
+ last = priv->up_node;
+ }
+ else
+ {
+ first = priv->up_node;
+ middle = priv->down_node;
+ last = priv->entry_node;
+ }
+ }
+ else
+ {
+ first = priv->up_node;
+ middle = priv->entry_node;
+ last = priv->down_node;
+ }
+
+ gtk_css_node_insert_before (widget_node, first, middle);
+ gtk_css_node_insert_after (widget_node, last, middle);
+}
+
static void
gtk_spin_button_init (GtkSpinButton *spin_button)
{
GtkSpinButtonPrivate *priv;
+ GtkCssNode *widget_node;
GtkStyleContext *context;
spin_button->priv = gtk_spin_button_get_instance_private (spin_button);
priv->orientation = GTK_ORIENTATION_HORIZONTAL;
- gtk_spin_button_set_adjustment (spin_button, NULL);
-
context = gtk_widget_get_style_context (GTK_WIDGET (spin_button));
gtk_style_context_add_class (context, GTK_STYLE_CLASS_SPINBUTTON);
_gtk_orientable_set_style_classes (GTK_ORIENTABLE (spin_button));
+ widget_node = gtk_widget_get_css_node (GTK_WIDGET (spin_button));
+ priv->entry_node = gtk_css_node_new ();
+ gtk_css_node_set_name (priv->entry_node, I_("entry"));
+ gtk_css_node_set_parent (priv->entry_node, widget_node);
+ gtk_css_node_set_state (priv->entry_node, gtk_css_node_get_state (widget_node));
+ g_signal_connect_object (priv->entry_node, "style-changed", G_CALLBACK (node_style_changed_cb), spin_button, 0);
+ g_object_unref (priv->entry_node);
+
+ priv->down_node = gtk_css_node_new ();
+ gtk_css_node_set_name (priv->down_node, I_("button"));
+ gtk_css_node_add_class (priv->down_node, g_quark_from_static_string (GTK_STYLE_CLASS_BUTTON));
+ gtk_css_node_set_parent (priv->down_node, widget_node);
+ gtk_css_node_set_state (priv->down_node, gtk_css_node_get_state (widget_node));
+ g_signal_connect_object (priv->down_node, "style-changed", G_CALLBACK (node_style_changed_cb), spin_button, 0);
+ g_object_unref (priv->down_node);
+
+ priv->up_node = gtk_css_node_new ();
+ gtk_css_node_set_name (priv->up_node, I_("button"));
+ gtk_css_node_add_class (priv->up_node, g_quark_from_static_string (GTK_STYLE_CLASS_BUTTON));
+ gtk_css_node_set_parent (priv->up_node, widget_node);
+ gtk_css_node_set_state (priv->up_node, gtk_css_node_get_state (widget_node));
+ g_signal_connect_object (priv->up_node, "style-changed", G_CALLBACK (node_style_changed_cb), spin_button, 0);
+ g_object_unref (priv->up_node);
+
+ update_node_ordering (spin_button);
+
+ gtk_spin_button_set_adjustment (spin_button, NULL);
+
gtk_widget_add_events (GTK_WIDGET (spin_button), GDK_SCROLL_MASK);
priv->swipe_gesture = gtk_gesture_swipe_new (GTK_WIDGET (spin_button));
gtk_spin_button_unset_adjustment (spin_button);
- g_clear_object (&priv->up_panel_context);
- g_clear_object (&priv->down_panel_context);
-
g_object_unref (priv->swipe_gesture);
G_OBJECT_CLASS (gtk_spin_button_parent_class)->finalize (object);
}
}
-static void
-gtk_spin_button_panel_nthchildize_context (GtkSpinButton *spin_button,
- GtkStyleContext *context,
- gboolean is_down_panel)
-{
- GtkSpinButtonPrivate *priv = spin_button->priv;
- GtkWidget *widget = GTK_WIDGET (spin_button);
- GtkWidgetPath *path, *siblings_path;
- GtkTextDirection direction;
- gint up_pos, down_pos;
-
- /* We are a subclass of GtkEntry, which is not a GtkContainer, so we
- * have to emulate what gtk_container_get_path_for_child() would do
- * for the button panels
- */
- path = _gtk_widget_create_path (widget);
- siblings_path = gtk_widget_path_new ();
-
- if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
- {
- direction = gtk_widget_get_direction (widget);
-
- /* flip children order for RTL */
- if (direction == GTK_TEXT_DIR_RTL)
- {
- up_pos = gtk_widget_path_append_type (siblings_path, GTK_TYPE_SPIN_BUTTON);
- down_pos = gtk_widget_path_append_type (siblings_path, GTK_TYPE_SPIN_BUTTON);
- gtk_widget_path_append_type (siblings_path, GTK_TYPE_ENTRY);
- }
- else
- {
- gtk_widget_path_append_type (siblings_path, GTK_TYPE_ENTRY);
- down_pos = gtk_widget_path_append_type (siblings_path, GTK_TYPE_SPIN_BUTTON);
- up_pos = gtk_widget_path_append_type (siblings_path, GTK_TYPE_SPIN_BUTTON);
- }
- }
- else
- {
- up_pos = gtk_widget_path_append_type (siblings_path, GTK_TYPE_SPIN_BUTTON);
- gtk_widget_path_append_type (siblings_path, GTK_TYPE_ENTRY);
- down_pos = gtk_widget_path_append_type (siblings_path, GTK_TYPE_SPIN_BUTTON);
- }
-
- gtk_widget_path_iter_add_class (siblings_path, up_pos, GTK_STYLE_CLASS_BUTTON);
- gtk_widget_path_iter_add_class (siblings_path, down_pos, GTK_STYLE_CLASS_BUTTON);
-
- /* this allows compatibility for themes that use .spinbutton.button */
- gtk_widget_path_iter_add_class (siblings_path, up_pos, GTK_STYLE_CLASS_SPINBUTTON);
- gtk_widget_path_iter_add_class (siblings_path, down_pos, GTK_STYLE_CLASS_SPINBUTTON);
-
- if (is_down_panel)
- gtk_widget_path_append_with_siblings (path, siblings_path, down_pos);
- else
- gtk_widget_path_append_with_siblings (path, siblings_path, up_pos);
-
- gtk_style_context_set_path (context, path);
- gtk_widget_path_unref (path);
- gtk_widget_path_unref (siblings_path);
-}
-
static gboolean
gtk_spin_button_panel_at_limit (GtkSpinButton *spin_button,
GdkWindow *panel)
static GtkStateFlags
gtk_spin_button_panel_get_state (GtkSpinButton *spin_button,
- GdkWindow *panel)
+ GdkWindow *panel)
{
GtkStateFlags state;
GtkSpinButtonPrivate *priv = spin_button->priv;
return state;
}
-static GtkStyleContext *
-gtk_spin_button_panel_get_context (GtkSpinButton *spin_button,
- GdkWindow *panel)
+static void
+update_node_state (GtkSpinButton *spin_button)
{
GtkSpinButtonPrivate *priv = spin_button->priv;
- GtkStyleContext **contextp;
-
- contextp = (panel == priv->down_panel) ?
- &priv->down_panel_context : &priv->up_panel_context;
-
- if (*contextp == NULL)
- {
- *contextp = gtk_style_context_new ();
- gtk_spin_button_panel_nthchildize_context (spin_button, *contextp,
- panel == priv->down_panel);
- }
-
- gtk_style_context_set_screen (*contextp, gtk_widget_get_screen (GTK_WIDGET (spin_button)));
- gtk_style_context_set_state (*contextp, gtk_spin_button_panel_get_state (spin_button, panel));
- return *contextp;
+ gtk_css_node_set_state (priv->up_node,
+ gtk_spin_button_panel_get_state (spin_button, priv->up_panel));
+ gtk_css_node_set_state (priv->down_node,
+ gtk_spin_button_panel_get_state (spin_button, priv->down_panel));
}
-#include "gtkcsssectionprivate.h"
-
static void
gtk_spin_button_panel_get_size (GtkSpinButton *spin_button,
- GdkWindow *panel,
- gint *width,
- gint *height)
+ GdkWindow *panel,
+ gint *width,
+ gint *height)
{
+ GtkSpinButtonPrivate *priv = spin_button->priv;
GtkBorder button_padding, button_border;
GtkStyleContext *context;
GtkStateFlags state;
gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &w, &h);
icon_size = MAX (w, h);
- context = gtk_spin_button_panel_get_context (spin_button, panel);
+ context = gtk_widget_get_style_context (GTK_WIDGET (spin_button));
state = gtk_style_context_get_state (context);
+ if (panel == priv->up_panel)
+ gtk_style_context_save_to_node (context, priv->up_node);
+ else
+ gtk_style_context_save_to_node (context, priv->down_node);
gtk_style_context_get_padding (context, state, &button_padding);
gtk_style_context_get_border (context, state, &button_border);
+ gtk_style_context_restore (context);
+
if (width)
*width = icon_size + button_padding.left + button_padding.right +
button_border.left + button_border.right;
GtkIconHelper *icon_helper;
widget = GTK_WIDGET (spin_button);
+ context = gtk_widget_get_style_context (widget);
cairo_save (cr);
gtk_cairo_transform_to_window (cr, widget, panel);
- context = gtk_spin_button_panel_get_context (spin_button, panel);
-
height = gdk_window_get_height (panel);
width = gdk_window_get_width (panel);
_gtk_icon_helper_set_use_fallback (icon_helper, TRUE);
if (panel == priv->down_panel)
- _gtk_icon_helper_set_icon_name (icon_helper, "list-remove-symbolic", GTK_ICON_SIZE_MENU);
+ {
+ gtk_style_context_save_to_node (context, priv->down_node);
+ _gtk_icon_helper_set_icon_name (icon_helper, "list-remove-symbolic", GTK_ICON_SIZE_MENU);
+ }
else
- _gtk_icon_helper_set_icon_name (icon_helper, "list-add-symbolic", GTK_ICON_SIZE_MENU);
+ {
+ gtk_style_context_save_to_node (context, priv->up_node);
+ _gtk_icon_helper_set_icon_name (icon_helper, "list-add-symbolic", GTK_ICON_SIZE_MENU);
+ }
- _gtk_icon_helper_get_size (icon_helper, context,
- &icon_width, &icon_height);
+ _gtk_icon_helper_get_size (icon_helper, context, &icon_width, &icon_height);
- gtk_render_background (context, cr,
- 0, 0, width, height);
- gtk_render_frame (context, cr,
- 0, 0, width, height);
+ gtk_render_background (context, cr, 0, 0, width, height);
+ gtk_render_frame (context, cr, 0, 0, width, height);
x = floor ((width - icon_width) / 2.0);
y = floor ((height - icon_height) / 2.0);
- _gtk_icon_helper_draw (icon_helper, context, cr,
- x, y);
+ _gtk_icon_helper_draw (icon_helper, context, cr, x, y);
cairo_restore (cr);
+ gtk_style_context_restore (context);
+
g_object_unref (icon_helper);
}
GtkSpinButtonPrivate *priv = spin_button->priv;
priv->timer_step = gtk_adjustment_get_step_increment (priv->adjustment);
+ update_node_state (spin_button);
gtk_widget_queue_resize (GTK_WIDGET (spin_button));
}
}
static void
-gtk_spin_button_set_orientation (GtkSpinButton *spin,
- GtkOrientation orientation)
+gtk_spin_button_set_orientation (GtkSpinButton *spin,
+ GtkOrientation orientation)
{
GtkEntry *entry = GTK_ENTRY (spin);
GtkSpinButtonPrivate *priv = spin->priv;
gtk_entry_get_alignment (entry) == 0.5)
gtk_entry_set_alignment (entry, 0.0);
+ update_node_ordering (spin);
+
g_object_notify (G_OBJECT (spin), "orientation");
gtk_widget_queue_resize (GTK_WIDGET (spin));
}
GtkSpinButton *spin_button = GTK_SPIN_BUTTON (widget);
GtkSpinButtonPrivate *priv = spin_button->priv;
GtkEntry *entry = GTK_ENTRY (widget);
+ GtkStyleContext *context;
+ context = gtk_widget_get_style_context (widget);
+ gtk_style_context_save_to_node (context, priv->entry_node);
GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->get_preferred_width (widget, minimum, natural);
+ gtk_style_context_restore (context);
if (gtk_entry_get_width_chars (entry) < 0)
{
{
GtkSpinButton *spin_button = GTK_SPIN_BUTTON (widget);
GtkSpinButtonPrivate *priv = spin_button->priv;
+ GtkStyleContext *context;
+ context = gtk_widget_get_style_context (widget);
+ gtk_style_context_save_to_node (context, priv->entry_node);
GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->get_preferred_height_and_baseline_for_width (widget, width,
minimum, natural,
minimum_baseline,
natural_baseline);
+ gtk_style_context_restore (context);
if (priv->orientation == GTK_ORIENTATION_VERTICAL)
{
GtkSpinButton *spin = GTK_SPIN_BUTTON (widget);
GtkSpinButtonPrivate *priv = spin->priv;
GtkAllocation down_panel_allocation, up_panel_allocation;
+ GtkStyleContext *context;
gtk_widget_set_allocation (widget, allocation);
+
+ context = gtk_widget_get_style_context (widget);
+ gtk_style_context_save_to_node (context, priv->entry_node);
GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->size_allocate (widget, allocation);
+ gtk_style_context_restore (context);
gtk_spin_button_panel_get_allocations (spin, &down_panel_allocation, &up_panel_allocation);
}
static gint
-gtk_spin_button_draw (GtkWidget *widget,
- cairo_t *cr)
+gtk_spin_button_draw (GtkWidget *widget,
+ cairo_t *cr)
{
GtkSpinButton *spin = GTK_SPIN_BUTTON (widget);
GtkSpinButtonPrivate *priv = spin->priv;
+ GtkStyleContext *context;
+
+ context = gtk_widget_get_style_context (widget);
+ gtk_style_context_save_to_node (context, priv->entry_node);
GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->draw (widget, cr);
+ gtk_style_context_restore (context);
/* Draw the buttons */
gtk_spin_button_panel_draw (spin, cr, priv->down_panel);
GtkSpinButton *spin = GTK_SPIN_BUTTON (widget);
GtkSpinButtonPrivate *priv = spin->priv;
- if ((event->window == priv->down_panel) ||
- (event->window == priv->up_panel))
+ if (event->window == priv->down_panel ||
+ event->window == priv->up_panel)
{
priv->in_child = event->window;
+ update_node_state (spin);
gtk_widget_queue_draw (GTK_WIDGET (spin));
}
if (priv->in_child != NULL)
{
priv->in_child = NULL;
+ update_node_state (spin);
gtk_widget_queue_draw (GTK_WIDGET (spin));
}
if (gtk_spin_button_stop_spinning (spin))
gtk_widget_queue_draw (GTK_WIDGET (spin));
}
-}
-static void
-gtk_spin_button_style_updated (GtkWidget *widget)
-{
- GtkSpinButton *spin = GTK_SPIN_BUTTON (widget);
- GtkSpinButtonPrivate *priv = spin->priv;
-
- if (priv->down_panel_context)
- gtk_spin_button_panel_nthchildize_context (spin,
- priv->down_panel_context,
- TRUE);
-
- if (priv->up_panel_context)
- gtk_spin_button_panel_nthchildize_context (spin,
- priv->up_panel_context,
- FALSE);
-
- GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->style_updated (widget);
+ update_node_state (spin);
}
static gint
g_signal_emit (spin_button, spinbutton_signals[VALUE_CHANGED], 0);
+ update_node_state (spin_button);
+
gtk_widget_queue_draw (GTK_WIDGET (spin_button));
g_object_notify (G_OBJECT (spin_button), "value");
GTK_ENTRY_CLASS (gtk_spin_button_parent_class)->get_text_area_size (entry, x, y, width, height);
+ gtk_spin_button_panel_get_size (GTK_SPIN_BUTTON (entry), priv->up_panel, &up_panel_width, &up_panel_height);
+ gtk_spin_button_panel_get_size (GTK_SPIN_BUTTON (entry), priv->down_panel, &down_panel_width, &down_panel_height);
+
if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
{
- gtk_spin_button_panel_get_size (GTK_SPIN_BUTTON (entry), priv->up_panel, &up_panel_width, &up_panel_height);
- gtk_spin_button_panel_get_size (GTK_SPIN_BUTTON (entry), priv->down_panel, &down_panel_width, &down_panel_height);
-
if (gtk_widget_get_direction (GTK_WIDGET (entry)) == GTK_TEXT_DIR_RTL)
{
if (x)
}
void
-_gtk_spin_button_get_panels (GtkSpinButton *spin_button,
- GdkWindow **down_panel,
- GdkWindow **up_panel)
+_gtk_spin_button_get_panels (GtkSpinButton *spin_button,
+ GdkWindow **down_panel,
+ GdkWindow **up_panel)
{
if (down_panel != NULL)
*down_panel = spin_button->priv->down_panel;
if (up_panel != NULL)
*up_panel = spin_button->priv->up_panel;
}
+
+static void
+gtk_spin_button_direction_changed (GtkWidget *widget,
+ GtkTextDirection previous_dir)
+{
+ update_node_ordering (GTK_SPIN_BUTTON (widget));
+
+ GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->direction_changed (widget, previous_dir);
+}
* GtkSpinButton *
*****************/
-.spinbutton {
+spinbutton {
&:not(.vertical) {
- .button {
+ button {
background-image: none;
border-style: none none none solid;
border-color: transparentize($borders_color, 0.7);
// OSD horizontal
.osd &:not(.vertical) {
- .button {
+ button {
@include button(undecorated);
color: $osd_fg_color;
border-style: none none none solid;
// Vertical
&.vertical {
- .button {
+ button {
padding-top: 8px; // Same vertical padding as image-buttons
padding-bottom: 8px; //
&:first-child {
}
// OSD vertical
- .osd &.vertical .button:first-child {
+ .osd &.vertical button:first-child {
@include button(osd);
&:hover { @include button(osd-hover);}
&:active { @include button(osd-active); }
/*****************
* GtkSpinButton *
*****************/
-.spinbutton:not(.vertical) .button {
+spinbutton:not(.vertical) button {
background-image: none;
border-style: none none none solid;
border-color: rgba(28, 31, 31, 0.3);
color: #dadad9;
border-radius: 0;
box-shadow: none; }
- .spinbutton:not(.vertical) .button:dir(rtl) {
+ spinbutton:not(.vertical) button:dir(rtl) {
border-style: none solid none none; }
- .spinbutton:not(.vertical) .button:hover {
+ spinbutton:not(.vertical) button:hover {
color: #eeeeec;
background-color: rgba(238, 238, 236, 0.05); }
- .spinbutton:not(.vertical) .button:insensitive {
+ spinbutton:not(.vertical) button:insensitive {
color: rgba(148, 151, 150, 0.3); }
- .spinbutton:not(.vertical) .button:active {
+ spinbutton:not(.vertical) button:active {
box-shadow: inset 0 2px 3px -1px rgba(0, 0, 0, 0.2);
background-color: rgba(0, 0, 0, 0.1); }
- .spinbutton:not(.vertical) .button:backdrop {
+ spinbutton:not(.vertical) button:backdrop {
color: #8a8c8b;
border-color: rgba(31, 34, 34, 0.3);
background-color: transparent; }
- .spinbutton:not(.vertical) .button:backdrop:insensitive {
+ spinbutton:not(.vertical) button:backdrop:insensitive {
background-image: none;
color: rgba(93, 103, 103, 0.3);
border-style: none none none solid; }
- .spinbutton:not(.vertical) .button:backdrop:insensitive:dir(rtl) {
+ spinbutton:not(.vertical) button:backdrop:insensitive:dir(rtl) {
border-style: none solid none none; }
-.osd .spinbutton:not(.vertical) .button {
+.osd spinbutton:not(.vertical) button {
border-color: transparent;
background-color: transparent;
background-image: none;
border-radius: 0;
box-shadow: none;
icon-shadow: 0 1px black; }
- .osd .spinbutton:not(.vertical) .button:dir(rtl) {
+ .osd spinbutton:not(.vertical) button:dir(rtl) {
border-style: none solid none none; }
- .osd .spinbutton:not(.vertical) .button:hover {
+ .osd spinbutton:not(.vertical) button:hover {
border-color: transparent;
background-color: transparent;
background-image: none;
background-color: rgba(238, 238, 236, 0.1);
icon-shadow: 0 1px black;
box-shadow: none; }
- .osd .spinbutton:not(.vertical) .button:backdrop {
+ .osd spinbutton:not(.vertical) button:backdrop {
border-color: transparent;
background-color: transparent;
background-image: none;
border-color: rgba(0, 0, 0, 0.5);
icon-shadow: none;
box-shadow: none; }
- .osd .spinbutton:not(.vertical) .button:insensitive {
+ .osd spinbutton:not(.vertical) button:insensitive {
border-color: transparent;
background-color: transparent;
background-image: none;
border-color: rgba(0, 0, 0, 0.5);
icon-shadow: none;
box-shadow: none; }
- .osd .spinbutton:not(.vertical) .button:last-child {
+ .osd spinbutton:not(.vertical) button:last-child {
border-radius: 0 3px 3px 0; }
- .osd .spinbutton:not(.vertical) .button:dir(rtl):first-child {
+ .osd spinbutton:not(.vertical) button:dir(rtl):first-child {
border-radius: 3px 0 0 3px; }
-.spinbutton.vertical .button {
+spinbutton.vertical button {
padding-top: 8px;
padding-bottom: 8px; }
- .spinbutton.vertical .button:first-child {
+ spinbutton.vertical button:first-child {
color: #eeeeec;
outline-color: rgba(238, 238, 236, 0.3);
border-color: #1c1f1f;
text-shadow: 0 -1px rgba(0, 0, 0, 0.81176);
icon-shadow: 0 -1px rgba(0, 0, 0, 0.81176);
box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); }
- .spinbutton.vertical .button:first-child:active {
+ spinbutton.vertical button:first-child:active {
color: #eeeeec;
outline-color: rgba(238, 238, 236, 0.3);
border-color: #1c1f1f;
text-shadow: 0 -1px rgba(0, 0, 0, 0.89176);
icon-shadow: 0 -1px rgba(0, 0, 0, 0.89176);
box-shadow: inset 0 1px rgba(0, 0, 0, 0.07), inset 0 2px 1px -2px rgba(0, 0, 0, 0.6); }
- .spinbutton.vertical .button:first-child:hover {
+ spinbutton.vertical button:first-child:hover {
color: #eeeeec;
outline-color: rgba(238, 238, 236, 0.3);
border-color: #1c1f1f;
text-shadow: 0 -1px rgba(0, 0, 0, 0.77976);
icon-shadow: 0 -1px rgba(0, 0, 0, 0.77976);
box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); }
- .spinbutton.vertical .button:first-child:insensitive {
+ spinbutton.vertical button:first-child:insensitive {
color: #949796;
border-color: #1c1f1f;
background-image: linear-gradient(to bottom, #333636);
text-shadow: none;
icon-shadow: none;
box-shadow: inset 0 1px rgba(255, 255, 255, 0); }
- .spinbutton.vertical .button:first-child:insensitive > .label, .spinbutton.vertical .header-bar .button.titlebutton:first-child:insensitive > .label,
- .spinbutton.vertical .titlebar .button.titlebutton:first-child:insensitive > .label {
+ spinbutton.vertical button:first-child:insensitive > .label {
color: inherit; }
- .spinbutton.vertical .button:first-child:backdrop {
+ spinbutton.vertical button:first-child:backdrop {
color: #949796;
border-color: #1f2222;
background-image: linear-gradient(to bottom, #393f3f);
text-shadow: none;
icon-shadow: none;
box-shadow: inset 0 1px rgba(255, 255, 255, 0); }
- .spinbutton.vertical .button:first-child:backdrop:insensitive {
+ spinbutton.vertical button:first-child:backdrop:insensitive {
color: #5d6767;
border-color: #1f2222;
background-image: linear-gradient(to bottom, #333636);
text-shadow: none;
icon-shadow: none;
box-shadow: inset 0 1px rgba(255, 255, 255, 0); }
- .spinbutton.vertical .button:first-child:backdrop:insensitive > .label, .spinbutton.vertical .header-bar .button.titlebutton:first-child:backdrop:insensitive > .label,
- .spinbutton.vertical .titlebar .button.titlebutton:first-child:backdrop:insensitive > .label {
+ spinbutton.vertical button:first-child:backdrop:insensitive > .label {
color: inherit; }
-.spinbutton.vertical.entry {
+spinbutton.vertical.entry {
border-radius: 0;
padding-left: 3px;
padding-right: 3px; }
-.spinbutton.vertical .button:first-child, .spinbutton.vertical .button:first-child:active, .spinbutton.vertical .button:first-child:hover, .spinbutton.vertical .button:first-child:insensitive, .spinbutton.vertical .button:first-child:backdrop {
+spinbutton.vertical button:first-child, spinbutton.vertical button:first-child:active, spinbutton.vertical button:first-child:hover, spinbutton.vertical button:first-child:insensitive, spinbutton.vertical button:first-child:backdrop {
border-radius: 3px 3px 0 0;
border-style: solid solid none solid; }
-.spinbutton.vertical .button:last-child {
+spinbutton.vertical button:last-child {
border-radius: 0 0 3px 3px;
border-style: none solid solid solid; }
-.osd .spinbutton.vertical .button:first-child {
+.osd spinbutton.vertical button:first-child {
color: #eeeeec;
border-color: rgba(0, 0, 0, 0.7);
background-image: linear-gradient(to bottom, rgba(32, 37, 38, 0.7));
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
outline-color: rgba(238, 238, 236, 0.3); }
- .osd .spinbutton.vertical .button:first-child:hover {
+ .osd spinbutton.vertical button:first-child:hover {
color: white;
border-color: rgba(0, 0, 0, 0.7);
background-image: linear-gradient(to bottom, rgba(60, 69, 71, 0.7));
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
outline-color: rgba(238, 238, 236, 0.3); }
- .osd .spinbutton.vertical .button:first-child:active {
+ .osd spinbutton.vertical button:first-child:active {
color: white;
border-color: rgba(0, 0, 0, 0.7);
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.7));
text-shadow: none;
icon-shadow: none;
outline-color: rgba(238, 238, 236, 0.3); }
- .osd .spinbutton.vertical .button:first-child:insensitive {
+ .osd spinbutton.vertical button:first-child:insensitive {
color: #878a89;
border-color: rgba(0, 0, 0, 0.7);
background-image: linear-gradient(to bottom, rgba(53, 57, 58, 0.5));
box-shadow: none;
text-shadow: none;
icon-shadow: none; }
- .osd .spinbutton.vertical .button:first-child:backdrop {
+ .osd spinbutton.vertical button:first-child:backdrop {
color: #eeeeec;
border-color: rgba(0, 0, 0, 0.7);
background-image: linear-gradient(to bottom, rgba(32, 37, 38, 0.7));
box-shadow: none;
text-shadow: none;
icon-shadow: none; }
-GtkTreeView .spinbutton entry, GtkTreeView .spinbutton entry:focus {
+GtkTreeView spinbutton entry, GtkTreeView spinbutton entry:focus {
padding: 1px;
border-width: 1px 0;
border-color: #215d9c;
/*****************
* GtkSpinButton *
*****************/
-.spinbutton:not(.vertical) .button {
+spinbutton:not(.vertical) button {
background-image: none;
border-style: none none none solid;
border-color: rgba(161, 161, 161, 0.3);
color: #43484a;
border-radius: 0;
box-shadow: none; }
- .spinbutton:not(.vertical) .button:dir(rtl) {
+ spinbutton:not(.vertical) button:dir(rtl) {
border-style: none solid none none; }
- .spinbutton:not(.vertical) .button:hover {
+ spinbutton:not(.vertical) button:hover {
color: #2e3436;
background-color: rgba(46, 52, 54, 0.05); }
- .spinbutton:not(.vertical) .button:insensitive {
+ spinbutton:not(.vertical) button:insensitive {
color: rgba(142, 145, 146, 0.3); }
- .spinbutton:not(.vertical) .button:active {
+ spinbutton:not(.vertical) button:active {
box-shadow: inset 0 2px 3px -1px rgba(0, 0, 0, 0.2);
background-color: rgba(0, 0, 0, 0.1); }
- .spinbutton:not(.vertical) .button:backdrop {
+ spinbutton:not(.vertical) button:backdrop {
color: #999c9d;
border-color: rgba(169, 169, 169, 0.3);
background-color: transparent; }
- .spinbutton:not(.vertical) .button:backdrop:insensitive {
+ spinbutton:not(.vertical) button:backdrop:insensitive {
background-image: none;
color: rgba(199, 199, 199, 0.3);
border-style: none none none solid; }
- .spinbutton:not(.vertical) .button:backdrop:insensitive:dir(rtl) {
+ spinbutton:not(.vertical) button:backdrop:insensitive:dir(rtl) {
border-style: none solid none none; }
-.osd .spinbutton:not(.vertical) .button {
+.osd spinbutton:not(.vertical) button {
border-color: transparent;
background-color: transparent;
background-image: none;
border-radius: 0;
box-shadow: none;
icon-shadow: 0 1px black; }
- .osd .spinbutton:not(.vertical) .button:dir(rtl) {
+ .osd spinbutton:not(.vertical) button:dir(rtl) {
border-style: none solid none none; }
- .osd .spinbutton:not(.vertical) .button:hover {
+ .osd spinbutton:not(.vertical) button:hover {
border-color: transparent;
background-color: transparent;
background-image: none;
background-color: rgba(238, 238, 236, 0.1);
icon-shadow: 0 1px black;
box-shadow: none; }
- .osd .spinbutton:not(.vertical) .button:backdrop {
+ .osd spinbutton:not(.vertical) button:backdrop {
border-color: transparent;
background-color: transparent;
background-image: none;
border-color: rgba(0, 0, 0, 0.5);
icon-shadow: none;
box-shadow: none; }
- .osd .spinbutton:not(.vertical) .button:insensitive {
+ .osd spinbutton:not(.vertical) button:insensitive {
border-color: transparent;
background-color: transparent;
background-image: none;
border-color: rgba(0, 0, 0, 0.5);
icon-shadow: none;
box-shadow: none; }
- .osd .spinbutton:not(.vertical) .button:last-child {
+ .osd spinbutton:not(.vertical) button:last-child {
border-radius: 0 3px 3px 0; }
- .osd .spinbutton:not(.vertical) .button:dir(rtl):first-child {
+ .osd spinbutton:not(.vertical) button:dir(rtl):first-child {
border-radius: 3px 0 0 3px; }
-.spinbutton.vertical .button {
+spinbutton.vertical button {
padding-top: 8px;
padding-bottom: 8px; }
- .spinbutton.vertical .button:first-child {
+ spinbutton.vertical button:first-child {
color: #2e3436;
outline-color: rgba(46, 52, 54, 0.3);
border-color: #a1a1a1;
text-shadow: 0 1px rgba(255, 255, 255, 0.76923);
icon-shadow: 0 1px rgba(255, 255, 255, 0.76923);
box-shadow: inset 0 1px white; }
- .spinbutton.vertical .button:first-child:active {
+ spinbutton.vertical button:first-child:active {
color: #2e3436;
outline-color: rgba(46, 52, 54, 0.3);
border-color: #a1a1a1;
text-shadow: 0 1px rgba(255, 255, 255, 0.76923);
icon-shadow: 0 1px rgba(255, 255, 255, 0.76923);
box-shadow: inset 0 1px rgba(0, 0, 0, 0.07), inset 0 2px 1px -2px rgba(0, 0, 0, 0.6); }
- .spinbutton.vertical .button:first-child:hover {
+ spinbutton.vertical button:first-child:hover {
color: #2e3436;
outline-color: rgba(46, 52, 54, 0.3);
border-color: #a1a1a1;
text-shadow: 0 1px rgba(255, 255, 255, 0.76923);
icon-shadow: 0 1px rgba(255, 255, 255, 0.76923);
box-shadow: inset 0 1px white; }
- .spinbutton.vertical .button:first-child:insensitive {
+ spinbutton.vertical button:first-child:insensitive {
color: #8e9192;
border-color: #a1a1a1;
background-image: linear-gradient(to bottom, #f4f4f4);
text-shadow: none;
icon-shadow: none;
box-shadow: inset 0 1px rgba(255, 255, 255, 0); }
- .spinbutton.vertical .button:first-child:insensitive > .label, .spinbutton.vertical .header-bar .button.titlebutton:first-child:insensitive > .label,
- .spinbutton.vertical .titlebar .button.titlebutton:first-child:insensitive > .label {
+ spinbutton.vertical button:first-child:insensitive > .label {
color: inherit; }
- .spinbutton.vertical .button:first-child:backdrop {
+ spinbutton.vertical button:first-child:backdrop {
color: #8e9192;
border-color: darkgray;
background-image: linear-gradient(to bottom, #ededed);
text-shadow: none;
icon-shadow: none;
box-shadow: inset 0 1px rgba(255, 255, 255, 0); }
- .spinbutton.vertical .button:first-child:backdrop:insensitive {
+ spinbutton.vertical button:first-child:backdrop:insensitive {
color: #c7c7c7;
border-color: darkgray;
background-image: linear-gradient(to bottom, #f4f4f4);
text-shadow: none;
icon-shadow: none;
box-shadow: inset 0 1px rgba(255, 255, 255, 0); }
- .spinbutton.vertical .button:first-child:backdrop:insensitive > .label, .spinbutton.vertical .header-bar .button.titlebutton:first-child:backdrop:insensitive > .label,
- .spinbutton.vertical .titlebar .button.titlebutton:first-child:backdrop:insensitive > .label {
+ spinbutton.vertical button:first-child:backdrop:insensitive > .label {
color: inherit; }
-.spinbutton.vertical.entry {
+spinbutton.vertical.entry {
border-radius: 0;
padding-left: 3px;
padding-right: 3px; }
-.spinbutton.vertical .button:first-child, .spinbutton.vertical .button:first-child:active, .spinbutton.vertical .button:first-child:hover, .spinbutton.vertical .button:first-child:insensitive, .spinbutton.vertical .button:first-child:backdrop {
+spinbutton.vertical button:first-child, spinbutton.vertical button:first-child:active, spinbutton.vertical button:first-child:hover, spinbutton.vertical button:first-child:insensitive, spinbutton.vertical button:first-child:backdrop {
border-radius: 3px 3px 0 0;
border-style: solid solid none solid; }
-.spinbutton.vertical .button:last-child {
+spinbutton.vertical button:last-child {
border-radius: 0 0 3px 3px;
border-style: none solid solid solid; }
-.osd .spinbutton.vertical .button:first-child {
+.osd spinbutton.vertical button:first-child {
color: #eeeeec;
border-color: rgba(0, 0, 0, 0.7);
background-image: linear-gradient(to bottom, rgba(32, 37, 38, 0.7));
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
outline-color: rgba(238, 238, 236, 0.3); }
- .osd .spinbutton.vertical .button:first-child:hover {
+ .osd spinbutton.vertical button:first-child:hover {
color: white;
border-color: rgba(0, 0, 0, 0.7);
background-image: linear-gradient(to bottom, rgba(60, 69, 71, 0.7));
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
outline-color: rgba(238, 238, 236, 0.3); }
- .osd .spinbutton.vertical .button:first-child:active {
+ .osd spinbutton.vertical button:first-child:active {
color: white;
border-color: rgba(0, 0, 0, 0.7);
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.7));
text-shadow: none;
icon-shadow: none;
outline-color: rgba(238, 238, 236, 0.3); }
- .osd .spinbutton.vertical .button:first-child:insensitive {
+ .osd spinbutton.vertical button:first-child:insensitive {
color: #878a89;
border-color: rgba(0, 0, 0, 0.7);
background-image: linear-gradient(to bottom, rgba(53, 57, 58, 0.5));
box-shadow: none;
text-shadow: none;
icon-shadow: none; }
- .osd .spinbutton.vertical .button:first-child:backdrop {
+ .osd spinbutton.vertical button:first-child:backdrop {
color: #eeeeec;
border-color: rgba(0, 0, 0, 0.7);
background-image: linear-gradient(to bottom, rgba(32, 37, 38, 0.7));
box-shadow: none;
text-shadow: none;
icon-shadow: none; }
-GtkTreeView .spinbutton entry, GtkTreeView .spinbutton entry:focus {
+GtkTreeView spinbutton entry, GtkTreeView spinbutton entry:focus {
padding: 1px;
border-width: 1px 0;
border-color: #4a90d9;